
//
//  YYYUserAccount.swift
//  HotNews
//
//  Created by YYY on 2017/10/13.
//  Copyright © 2017年 成品家（北京）网路科技有限公司. All rights reserved.
//

import UIKit
/*
 数据存储方式：
 1:偏好设置，存储小数据
 2:沙盒／归档（json、plist）
 3:数据库SQLite、CoreData
 4:钥匙串访问（自动加密），存储小数据，需要使用框架 SSKeychain
 */
private let fileName = "userAccount.json"

// MARK: 建立用户模型
class YYYUserAccount: NSObject {

    //用户昵称
    var screen_name: String?
    
    //用户头像
    var avatar_large: String?
    
    //访问令牌
    var access_token: String?
    
    //用户代号
    var uid: String?
    
    //token的过期时间，单位秒
    var expires_in: TimeInterval = 0
    {
        didSet
        {
            expiresDate = Date(timeIntervalSinceNow: expires_in)
        }
    }
    //过期日期
    var expiresDate: Date?
    
    override var description: String
    {
        return yy_modelDescription()
    }
    
    //模型数据的构造函数
    override init()
    {
        super.init()
        let filePath = (kDocumentPath as NSString).appendingPathComponent(fileName)
        guard let data = NSData(contentsOfFile: filePath),
              let json = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String: AnyObject] else
        {
            return
        }
        //将json数据转换成模型数据
        yy_modelSet(with: json ?? [:])
        //测试token过期
        //expiresDate = Date(timeIntervalSinceNow: -24 * 3600)
        if expiresDate?.compare(Date()) != .orderedDescending {
            access_token = nil
            uid = nil
            //移除沙盒文件
            try? FileManager.default.removeItem(atPath: filePath)
        }
    }
}

extension YYYUserAccount
{
    //保存用户模型数据
    func saveAccount()
    {
        //使用yy_modelToJSONObject将模型数据转换为字典
        var dict = yy_modelToJSONObject() as? [String: Any] ?? [:]
        dict.removeValue(forKey: "expires_in")
        //字典数据反序列化
        guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []) else
        {
            return
        }
        //保存路径
        let filePath = (kDocumentPath as NSString).appendingPathComponent(fileName)
        //写入文件
        (data as NSData).write(toFile: filePath, atomically: true)
        
        print("文件存储路径：\(filePath)")
    }
}
